<?php
// Author : evilair
// Time : 2017/08/02

/**********************************************
* 字符串转化成数字
* 考虑详细情况,有很多情况考虑不周的
*
* 1. 若字符串开头是空格,则跳过所有空格,到第一个非空格字符,如果没有,则返回0
* 2. 若第一个字符是'+/-'则标记一个sign为正负号
* 3. 若下一个字符不是数字,则返回0.完全不考虑小数点和自然数的情况
* 4. 如果下一个字符是数字,转换成整型存储下来,若接下来是字符串,则返回目前的结果
* 5. 还需要考虑边界的问题,如果超过了整型数的范围,则用边界值替代当前值
**********************************************/

define('MAX_INT', PHP_INT_MAX);
define('MIN_INT', -MAX_INT -1);
function strToInt($str)
{
  // 判断第一个字符是否是+/-号
  $sign = false;
  $str = trim($str);
  $str2int = '';
  if(strlen($str) <= 0) {
    return 0;
  }
  if($str[0] == '+' || $str[0] == '-') {
    $sign = $str[0];
  }
  $start = 0;
  if($sign) {
    $start = 1;
  }
  for($i=$start; $i<strlen($str);$i++) {
    if(is_numeric($str[$i])) {
      $str2int .= $str[$i];
      // echo $str2int."\n";
    } else {
       return bsechoInt($str2int, $sign);
    }
  }
  // return $str2int;
  return bsechoInt(str2int, $sign);
}

function bsechoInt($str, $sign = false) {
  $integer = 0;
  if($sign) {
    if ($sign == '+') {
      $integer = intval($str);
      return $integer > MAX_INT ? MAX_INT : $integer;
    }
    if ($sign == '-') {
      $integer = 0 - intval($str);
      return $integer > MIN_INT ? $integer : MIN_INT;
    }
  } else {
    $integer = intval($str);
    return $integer > MAX_INT ? MAX_INT : $integer;
  }
}
echo MAX_INT;
echo "\n";
echo MIN_INT;
echo "\n";
echo strToInt('-12aa358a');
echo "\n";
echo strToInt('a3434');
// echo bsechoInt('12353', '-');
// echo intval('123');